export const getSearchAnswer = async (filterParam, onProgress) => {


    // 构建请求数据
    const data = {
      question: question,
      stream: true
    };
    
    
    console.log(`检索条件: "${question}"`, 
               `使用session_id: ${sessionId}`, 
               `isFirstRequest: ${isFirstRequest}`);
    
    // 发送流式请求
    // const response = await fetch(`${BASE_URL}/api/v1/chats/${CHAT_ID}/completions`, {
    //   method: 'POST',
    //   headers: {
    //     'Content-Type': 'application/json',
    //     'Authorization': `Bearer ${API_KEY}`
    //   },
    //   body: JSON.stringify(data)
    // });
    
    const response = await search();
    if (response.ok) {
      let fullAnswer = '';
      let currentChunk = '';
      let hasDetectedAnswer = false; // 是否检测到有效回答
      let buffer = ''; // 用于存储跨块的不完整JSON
      let firstResponseProcessed = false; // 是否已处理第一个响应
      let inWelcomeMode = false; // 是否正处于欢迎语模式
      
      // 处理流式响应
      const reader = response.body.getReader();
      const decoder = new TextDecoder('utf-8');
      
      // 如果是首次请求，先显示加载提示
      if (isFirstRequest && onProgress) {
        onProgress("正在获取回答...");
      }
      
      while (true) {
        const { done, value } = await reader.read();
        if (done) break;
        
        // 解码当前数据块并添加到缓冲区
        const chunk = decoder.decode(value, { stream: true });
        buffer += chunk;
        
        // 尝试从缓冲区中提取完整的数据行
        const lines = buffer.split('\n');
        // 保留最后一行（可能不完整）
        buffer = lines.pop() || '';
        
        for (const line of lines) {
          if (line.startsWith('data:')) {
            let jsonStr = line.substring(5).trim();
            
            try {
              const result = JSON.parse(jsonStr);
              
              // 检查是否是最后一条消息（布尔值true）
              if (typeof result.data === 'boolean') {
                continue;
              }
              
              // 如果是首次请求，保存会话ID
              if (!sessionId && result.data && result.data.session_id) {
                sessionId = result.data.session_id;
                console.log(`新会话ID创建: ${sessionId}`);
              }
              
              // 提取回答内容
              if (result.data && result.data.answer) {
                // 获取当前响应块中的答案
                const answerText = result.data.answer;
                
                // 检查是否是首次响应且是欢迎语
                if (!firstResponseProcessed && isFirstRequest && isGreetingMessage(answerText)) {
                  console.log('首次响应检测到欢迎语，已忽略:', answerText);
                  inWelcomeMode = true;
                  firstResponseProcessed = true;
                  
                  // 提示正在处理中
                  if (onProgress) {
                    onProgress("正在思考您的问题...");
                  }
                  continue;
                }
                
                firstResponseProcessed = true;
                
                // 如果已经在欢迎语模式，且这个响应也是欢迎语的一部分，继续忽略
                if (inWelcomeMode && isGreetingMessage(answerText)) {
                  console.log('继续忽略欢迎语:', answerText);
                  continue;
                }
                
                // 退出欢迎语模式
                inWelcomeMode = false;
                
                // 清理特殊标记
                const cleanedText = cleanText(answerText);
                
                // 对于流式响应，我们需要计算增量部分
                if (cleanedText.length > currentChunk.length) {
                  // 有新内容，保存当前块
                  currentChunk = cleanedText;
                  
                  // 应用关键词加粗
                  fullAnswer = boldifyKeywords(cleanedText);
                  hasDetectedAnswer = true;
                  
                  // 触发进度回调
                  if (onProgress) {
                    onProgress(fullAnswer);
                  }
                }
              }
            } catch (e) {
              console.error('解析JSON出错:', e, 'JSON字符串:', jsonStr);
            }
          }
        }
      }
      
      // 完成处理，将非首次请求标记
      isFirstRequest = false;
      
      // 如果没有检测到任何有效回答（整个流中都是欢迎语）
      if (!hasDetectedAnswer) {
        // 尝试第二次请求获取实际答案
        console.log('未检测到有效回答，尝试第二次请求');
        return getAnswer(question, onProgress);
      }
      
      return { answer: fullAnswer };
    } else {
      const errorMsg = `请求失败: ${response.status}`;
      console.error(errorMsg);
      return { answer: errorMsg };
    }
  } catch (e) {
    const errorMsg = `发生错误: ${e.message}`;
    console.error(errorMsg);
    return { answer: errorMsg };
  }
};